package cl.inmobiliaria.beans;

import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import cl.inmobiliaria.entidades.Cliente;
import cl.inmobiliaria.entidades.Parametro;
import cl.inmobiliaria.entidades.Visita;
import cl.inmobiliaria.negocio.DatosCliente;
import cl.inmobiliaria.negocio.DatosRegionales;

@ManagedBean(name = "registrarVisitaBean")
@ViewScoped
public class RegistrarVisitaBean implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String rutCliente;
	private String direccion;
	private String nombres;
	private String region;
	private String apellidoPaterno;
	private String comuna;
	private String apellidoMaterno;
	private String telefonoComercial; 
	private String sexo;
	private String telefonoParticular;
	private int hijos;
	private String celular;
	private int edad;
	private String email;
	private int esInversionista;
	private int medioPromocion;
	private Map<String,String> comboRegiones = new HashMap<String, String>();
	private Map<String,Map<String,String>> datosComunas = new HashMap<String, Map<String,String>>(); 
	private Map<String,String> comboComunas = new HashMap<String, String>();
	
	public String getRutCliente() {
		return rutCliente;
	}
	public void setRutCliente(String rutCliente) {
		this.rutCliente = rutCliente;
	}
	public String getDireccion() {
		return direccion;
	}
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	public String getNombres() {
		return nombres;
	}
	public void setNombres(String nombres) {
		this.nombres = nombres;
	}
	public String getRegion() {
		return region;
	}
	public void setRegion(String region) {
		this.region = region;
	}
	public String getApellidoPaterno() {
		return apellidoPaterno;
	}
	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}
	public String getComuna() {
		return comuna;
	}
	public void setComuna(String comuna) {
		this.comuna = comuna;
	}
	public String getApellidoMaterno() {
		return apellidoMaterno;
	}
	public void setApellidoMaterno(String apellidoMaterno) {
		this.apellidoMaterno = apellidoMaterno;
	}
	public String getTelefonoComercial() {
		return telefonoComercial;
	}
	public void setTelefonoComercial(String telefonoComercial) {
		this.telefonoComercial = telefonoComercial;
	}
	public String getSexo() {
		return sexo;
	}
	public void setSexo(String sexo) {
		this.sexo = sexo;
	}
	public String getTelefonoParticular() {
		return telefonoParticular;
	}
	public void setTelefonoParticular(String telefonoParticular) {
		this.telefonoParticular = telefonoParticular;
	}
	public int getHijos() {
		return hijos;
	}
	public void setHijos(int hijos) {
		this.hijos = hijos;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public int getEdad() {
		return edad;
	}
	public void setEdad(int edad) {
		this.edad = edad;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getEsInversionista() {
		return esInversionista;
	}
	public void setEsInversionista(int esInversionista) {
		this.esInversionista = esInversionista;
	}
	public int getMedioPromocion() {
		return medioPromocion;
	}
	public void setMedioPromocion(int medioPromocion) {
		this.medioPromocion = medioPromocion;
	}
	public Map<String, String> getComboRegiones() {
		return comboRegiones;
	}
	public void setComboRegiones(Map<String, String> comboRegiones) {
		this.comboRegiones = comboRegiones;
	}
	public Map<String,Map<String,String>> getDatosComunas() {
		return datosComunas;
	}
	public void setDatosComunas(Map<String,Map<String,String>> datosComunas) {
		this.datosComunas = datosComunas;
	}
	public Map<String,String> getComboComunas() {
		return comboComunas;
	}
	public void setComboComunas(Map<String,String> comboComunas) {
		this.comboComunas = comboComunas;
	}
	
	public RegistrarVisitaBean()
	{
		DatosRegionales datosRegionales = new DatosRegionales();
		List<Parametro> regiones = datosRegionales.obtenerRegiones();
		
		for (int i=0; i<regiones.size(); i++)
		{
			comboRegiones.put(regiones.get(i).getDescripcion(), regiones.get(i).getCodigo());
			
			List<Parametro> comunas = datosRegionales.obtenerComunas(regiones.get(i).getCodigo());
			Map<String,String> datosComunaPorRegion = new HashMap<String, String>(); 
			
			for (int j=0; j<comunas.size(); j++)
			{
				datosComunaPorRegion.put(comunas.get(j).getDescripcion(), comunas.get(j).getCodigo());
			}
			
			datosComunas.put(regiones.get(i).getCodigo(), datosComunaPorRegion);
		}
		
		/*for (int i=0; i<comunas.size(); i++)
		{
			comboComunas.put(comunas.get(i).getDescripcion(), comunas.get(i).getCodigo());
		}*/
		
	}
	
	
	
	
	public void handleRegionChange() {  
        if(region !=null && !region.equals(""))  
        	comboComunas = datosComunas.get(region);  
        else  
        	comboComunas = new HashMap<String, String>();  
    }
	
	public void handleRutChange() {  
		String[] cadenaRut = this.rutCliente.split("-");

		DatosCliente datosCliente = new DatosCliente();
		DatosRegionales datosRegionales = new DatosRegionales();
		
		Cliente cliente = datosCliente.traerClientePorRut(Integer.parseInt(cadenaRut[0]));
		
		if (cliente  != null)
		{
			setApellidoMaterno(cliente.getApellidoMaterno());
			setApellidoPaterno(cliente.getApellidoPaterno());
			setCelular(cliente.getCelular());
			setDireccion(cliente.getDireccion());
			setEdad(cliente.getIdEdad());
			setEmail(cliente.getEmail());
			setEsInversionista(cliente.getIdInversionista());
			setHijos(cliente.getIdInversionista());
			setNombres(cliente.getNombres());
			setSexo(cliente.getIdSexo());
			setTelefonoComercial(cliente.getTelefonoComercial());
			setTelefonoParticular(cliente.getTelefonoParticular());
			setRegion(datosRegionales.regionPorComuna(cliente.getIdComuna()));
			handleRegionChange();
			setComuna(cliente.getIdComuna());
		}
		else
		{
			setApellidoMaterno("");
			setApellidoPaterno("");
			setCelular("");
			setDireccion("");
			setEdad(0);
			setEmail("");
			setEsInversionista(0);
			setHijos(0);
			setNombres("");
			setSexo("");
			setTelefonoComercial("");
			setTelefonoParticular("");
			setRegion("");
			handleRegionChange();
		}
	}
	
	public void guardarCliente() throws IOException {  
		
		
		if (this.rutCliente != "" && this.rutCliente.indexOf('-') > 0) 
		{
			Cliente cliente = new Cliente();
			String[] cadenaRut = this.rutCliente.split("-");
			cliente.setRut(Integer.parseInt(cadenaRut[0]));
			cliente.setDv(cadenaRut[1]);
			cliente.setApellidoMaterno(this.apellidoMaterno);
			cliente.setApellidoPaterno(this.apellidoPaterno);
			cliente.setCelular(this.celular);
			cliente.setDireccion(this.direccion);
			cliente.setEmail(this.email);
			cliente.setIdComuna(this.comuna);
			cliente.setIdEdad(this.edad);
			cliente.setIdHijos(this.hijos);
			cliente.setIdInversionista(this.esInversionista);
			cliente.setIdSexo(this.sexo);
			cliente.setNombres(this.nombres);
			cliente.setTelefonoComercial(this.telefonoComercial);
			cliente.setTelefonoParticular(this.telefonoParticular);
			
			DatosCliente datosCliente = new DatosCliente();
			datosCliente.guardarCliente(cliente);
			
			Visita visita = new Visita();
			visita.setIdLlegoProyecto((byte) this.medioPromocion);
			visita.setRutProspecto(cliente.getRut());

			visita.setIdEjecutivo(1); //No tengo nada que me indique el id de usuario 
			/*
			 * Se deja en session
			 */
			int idProyecto = (Integer) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("idProyecto");
			visita.setIdProyecto(idProyecto);
			int idVisita = datosCliente.guardarVisita(visita);
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("idVisita",idVisita);

			FacesContext.getCurrentInstance().getExternalContext().redirect("confirmarGenerarCotizacion.xhtml");
			//externalContext.redirect("foo.xhtml");
		}
	}
}

